package com.sun.designpatternsdemo.composite

import android.os.Bundle
import android.util.Log
import com.sun.designpatternsdemo.R
import com.sun.designpatternsdemo.app.AppConstant
import com.sun.designpatternsdemo.app.EMTagHandler
import com.sun.designpatternsdemo.base.BaseActivity
import com.sun.designpatternsdemo.databinding.ActivityCompositeBinding
/**
 * 版权：xx公司 版权所有
 * @author sun
 * 版本：1.0
 * 创建日期：${DATE} ${TIME}
 * 描述：${DATA}
 * * 组合模式（Composite Pattern），又叫部分整体模式，是用于把一组相似的对象当作一个单一的对象。
 * 组合模式依据树形结构来组合对象，用来表示部分以及整体层次。
 * 这种类型的设计模式属于结构型模式，它创建了对象组的树形结构。
 * <p>
 * 主要解决：
 * 它在我们树型结构的问题中，模糊了简单元素和复杂元素的概念，
 * 客户程序可以像处理简单元素一样来处理复杂元素，从而使得客户程序与复杂元素的内部结构解耦。
 */
class CompositeActivity : BaseActivity<ActivityCompositeBinding>() {

    override fun layoutId(): Int =R.layout.activity_composite

    override fun initView(savedInstanceState: Bundle?) {
        title = "组合模式"
        mDataBind.apply {
            tvDefine.text = EMTagHandler.fromHtml(AppConstant.COMPOSITE_DEFINE)

            val ceo = Employee("盖伦","赵信",30000)
            val headSales = Employee("亚索","剑姬",20000)
            val headMarketing = Employee("武器","潘森",20000)
            val clerk1 = Employee("永恩","娜美",10000)
            val clerk2 = Employee("VN","金克斯",10000)
            val salesExecutive1 = Employee("拉克斯","EZ",10000)
            val salesExecutive2 = Employee("猴子","石头人",10000)
            ceo.add(headSales)
            ceo.add(headMarketing)

            headSales.add(salesExecutive1)
            headSales.add(salesExecutive2)

            headMarketing.add(clerk1)
            headMarketing.add(clerk2)

            btCeo.setOnClickListener {
                Log.e("---", ceo.toString())
            }
        }
    }
}